//#include <iostream>
//#include <cstdio>
//#include <queue>
//using namespace std;
//
//
//
//struct node{
//	int x,y,n;
//	bool operator < (const node& no) const{
//		if(y != no.y)return y > no.y;
//		else return x > no.x;
//	}
//};
//
//priority_queue<node> fz;
//
//int main(){
//	int N;
//	cin >> N;
//	int h = N;
//	int x = 1,y = 1,n = 1;
//	while(fz.size() < h*h){
//		
//		for(;x < N;x++){
//			if(fz.size() >= h*h) break;
//			fz.push({x,y,n++});
//		}
//		for(;y < N;y++){
//			if(fz.size() >= h*h) break;
//			fz.push({x,y,n++});
//		}
//		for(;x > h - N + 1;x--){
//			if(fz.size() >= h*h) break;
//			fz.push({x,y,n++});
//		}
//		for(;y > h - N + 1;y--){
//			if(fz.size() >= h*h) break;
//			fz.push({x,y,n++});
//		}
//		N--;
//		x++;y++;
//	}
//	while(fz.size()){
//		auto t = fz.top();
//		fz.pop();
//		
//		printf("%3d",t.n);
//		if(t.x == h) cout << endl;
//	}
//	return 0;
//} 

//#include <iostream>
//#include <cstdio>
//#include <queue>
//using namespace std;
//
//const int N = 19;
//
//int n[N][N];
//
//int main(){
//	int N;
//	cin >> N;
//	int h = N;
//	int x = 1,y = 1,a = 1;
//	int sz = sizeof(n) / sizeof(n[0]);
//	int t = 0;
//	while(t < h*h){
//		
//		for(;x < N;x++){
//			if(t >= h*h) break;
//			n[x][y] = a++;
//			t++;
//		}
//		for(;y < N;y++){
//			if(t >= h*h) break;
//			n[x][y] = a++;
//			t++;
//		}
//		for(;x > h - N + 1;x--){
//			if(t >= h*h) break;
//			n[x][y] = a++;
//			t++;
//		}
//		for(;y > h - N + 1;y--){
//			if(t >= h*h) break;
//			n[x][y] = a++;
//			t++;
//		}
//		N--;
//		x++;y++;
//	}
//	for(int y = 1;y <= h;y++){
//		for(int x = 1;x <= h;x++){
//			printf("%3d",n[x][y]);
//			if(x == h) cout << endl;
//		}
//		
//	}
//	return 0;
//} 

#include <iostream>
#include <cstdio>
using namespace std;

int dx[] = {1,0,-1,0};
int dy[] = {0,1,0,-1};
int a[19][19];
int an = 1;

int main(){
	int n;
	cin >> n;
	int x = 0,y = 1;
	int op = 0;
	while(an <= n*n){
		x += dx[op];
		y += dy[op];
		if(x > n||y > n||x < 1||y < 1){
			x -= dx[op];
			y -= dy[op];
			op = (op + 1) % 4;
			continue;
		}
		if(a[x][y] != 0){
			x -= dx[op];
			y -= dy[op];
			op = (op + 1) % 4;
			continue;
		}
		a[x][y] = an++;
	}
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= n;j++){
			printf("%3d",a[j][i]);
		}
		cout << endl;
	}
	return 0;
}
